package application;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.ServiceLoader;
import java.util.Set;

import core.AlertUtil;
import core.ClientApp;
import javafx.application.Application;
import javafx.scene.image.Image;
import javafx.stage.Stage;

/**
 * 应用主界面实现
 * @author self
 *
 */
public class Main extends Application{

	/**
	 * 客户端应用名称与实例的Map集合
	 */
	private static final Map<String,ClientApp> APPS=new HashMap<String,ClientApp>();
	static {
		//通过服务发现查找客户端应用实例
		ServiceLoader<ClientApp> apps=ServiceLoader.load(ClientApp.class);
		for(ClientApp app:apps) {
			APPS.put(app.getAppName(), app);
		}
	}
	
	@Override
	public void start(Stage primaryStage){
		//设置全局样式
		Application.setUserAgentStylesheet("application/style.css");
		
		//设置应用图标
		Image appIcon = new Image(Main.class.getResourceAsStream("/icons/ruyi.png"));
		primaryStage.getIcons().add(appIcon);
		
		if(APPS.size() == 1) {
			//只有一个APP无需选择时，直接运行
			for(ClientApp app:APPS.values()) {
				try {
					app.start(primaryStage);
				} catch (Exception e) {
					AlertUtil.exception("应用启动异常",e);
				}
				return;
			}
		}
		
		//弹出APP选择框，让用户选择需要启动的客户端实例
		Set<String> clients = APPS.keySet();
		Optional<String> result = AlertUtil.choice("新建客户端","请选择客户端类型！", clients);
		result.ifPresent(clientType -> {
			try {
				//直接调用Application的start方法启动（这样启动不晓得会不会引起其他问题？？？）
				APPS.get(clientType).start(primaryStage);
			} catch (Exception e) {
				AlertUtil.exception("应用启动异常",e);
			}
		});
	}

	public static void main(String[] args) {
		launch(args);
	}
}
